// 配置路由的地方

import Vue from 'vue'
// 引入路由插件
import VueRouter from 'vue-router'
import routes from './routes'
// 引入store
import store from '@/store'
// 使用插件
Vue.use(VueRouter)
// 先将VueRouter原型对象的push方法保存一份
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;
// 重写push|replace
// 第一个参数:告诉原来的push方法,你要往哪里跳转(传递哪些参数)
VueRouter.prototype.push = function (location, resolve, reject) {
    if (resolve && reject) {
        // call||apply区别
        // 相同点 都可以调用函数一次，且都可以篡改函数的上下文一次
        originPush.call(this, location, resolve, reject)
    } else {
        originPush.call(this, location, () => { }, () => { })
    }
}
//重写VueRouter.prototype.replace方法
VueRouter.prototype.replace = function (location, resolve, reject) {
    (resolve && reject) ? originReplace.call(this, location, resolve, reject) : originReplace.call(this, location, () => { }, () => { });
}
// 暴露路由
let router = new VueRouter({
    routes,
    // 滚动行为
    scrollBehavior(to, from, savedPosition) {
        return { x: 0, y: 0 }
    }
})
// 全局守卫:前置守卫(在路由跳转之间进行判断)
router.beforeEach(async (to, from, next) => {
    // to:可以获取到你要跳转的那个路由信息
    // from:可以获取到你要从哪个路由来的信息
    // next:放行函数
    // 用户登录了,就会有token下发,没登录则没有
    let token = store.state.user.token
    let name = store.state.user.name
    if (token) {
        // 用户已经登录了,就不能再返回login页面
        if (to.path == '/login' || to.path == 'register') {
            next('/')
        } else {
            // 用户携带的有name,则全部放行
            if (name) {
                next()
            } else {
                try {
                    // 获取用户信息成功,放行
                    await store.dispatch('getUserInfo')
                    next()
                } catch (error) {
                    // token失效,清除token,让用户重新回login登录
                    await store.dispatch('userLogout')
                    next('/login')
                }
            }
        }
    } else {
        // 未登录不能去支付相关[pay|paysuccess|个人中心],如果点击这些页面则跳转到home首页.反之则放行
        let toPath = to.path
        if (toPath.indexOf('/trade') != -1 || toPath.indexOf('/pay') != -1 || toPath.indexOf('/center') != -1) {
            // 把想去而没去成的地方保存起来
            next('/login?redirect=' + toPath)
        }
        else {
            next()
        }
    }

})
export default router